#include<iostream>
using namespace std;
//已知负数求二进制位： -7 
//7的二进制位 00000000 00000000 00000000 00000111
// - 1       00000000 00000000 00000000 00000110
//           11111111 11111111 11111111 11111001
//已知二进制位求负数 ： 取反 + 1
// void printBinary(int num)
// {
//     for(int i = 31;i >= 0;i--)
//     {
//         //按位与
//         cout << ((num & (1 << i)) ? "1" : "0")<<" ";
//         //78 
//         //00000000 00000000 00000000 01001110
//     }
// }


void printBinary(int num)
{
    for(int i = 31;i >=0 ;i--)
    {
        //如果该结果非0
        cout << ((num & (1 << i)) ? "1" : "0")<<" ";
    }
}

int main()
{
    int a = 78;
    cout << a <<'\n';
    printBinary(a);
    cout <<'\n';
    cout <<"===a==="<<'\n';
    int b = - 6;
    //6
    //00000110
    //-1   00000101
    // 
    cout <<b<<'\n';
    printBinary(b);
    cout <<'\n';
    cout <<"===b==="<<'\n';
    //二进制：0101
    //       0110

    // -5的二进制：
    // 5
    //00000101
    //11111010

    //11111011

    //7
    //00000111
    //-5 + 7
    //        0010
    //按位& 
    //按位或 |
    //按位 异或 ^ 相同为0,,相异位1


    // 非负数 << 1，等同于乘以2
	// 非负数 << 2，等同于乘以4
	// 非负数 << 3，等同于乘以8
	// 非负数 << i，等同于乘以2的i次方
	// ...
	// 非负数 >> 1，等同于除以2
	// 非负数 >> 2，等同于除以4
	// 非负数 >> 3，等同于除以8
	// 非负数 >> i，等同于除以2的i次方

    
	// 只有非负数符合这个特征，负数不要用


    return 0;
}